package net.grandnature.android.morse.encode;

import java.util.HashMap;
import java.util.Map;

public class MorseEncoder {
	private Map<Character,String> convertMap;
	
	public MorseEncoder(){
		this.convertMap = new HashMap<Character, String>();
		add('a', "13");
		add('b', "3111");
		add('c', "3131");
		add('d', "311");
		add('e', "1");
		add('f', "1131");
		add('g', "331");
		add('h', "1111");
		add('j', "1333");
		add('k', "1311");
		add('l', "1311");
		add('m', "33");
		add('n', "31");
		add('o', "333");
		add('p', "1331");
		add('q', "3313");
		add('r', "131");
		add('s', "111");
		add('t', "3");
		add('u', "113");
		add('v', "113");
		add('w', "133");
		add('x', "3113");
		add('y', "3133");
		add('z', "3311");
		add('1', "13333");
		add('2', "11333");
		add('3', "11133");
		add('4', "11113");
		add('5', "11111");
		add('6', "31111");
		add('7', "33111");
		add('8', "33311");
		add('9', "33331");
		add('0', "33333");
	}
	
	private void add(char c, String morse){
		convertMap.put(c,morse);
	}
	public String encode(String str){
		str = str.toLowerCase();
		StringBuilder buf = new StringBuilder();
		String sep = "";
		for (char c : str.toCharArray()) {
			if(c==' '){
				buf.append(" ");
				sep = "";
				continue;
			}
			String morse = this.convertMap.get(c);
			if(morse==null){
				sep = "";
				continue;
			}
			buf.append(sep+morse);
			sep = "/";
		}
		return buf.toString();
	}
}
